// JavaScript 有两个原始值用于表示不存在或未初始化的值：null和undefined.

/* 
            null          undefined
    js    不存在         未初始化的值
    ts      
*/

function doSomething(x: string | null) {
    // if (x === null) {
      // do nothing
    // } else {
    //   console.log("Hello, " + x.toUpperCase());
    // }
  }

  doSomething(null)

//   function liveDangerously(x: number | undefined) {
//     // No error
//     console.log(x.toFixed());
//   }
//   let a :number
//   a = undefined
  
//   ts中配置开启strictNullChecks:true，才会对null和undefined类型进行类型检查，如果不设置，那默认关闭strictNullChecks，就不会检测undefined和null类型，这两种类型的值可以赋值给任意其他的类型变量，且可以使用任何方法，就不会检测

// 不开严格的strictNullChecks,可以把undefined和null当任何类型的值使用，开了，就有当独立的类型检测

// 非空断言运算符
function liveDangerously(x?: number | null) {
    // No error
    console.log(x!.toFixed()); //此处的x!就是告诉ts，这里的x不为null或undefined，且这个!是ts语法，转译的时候会被去掉
  }